package com.example.demo.design.mode.singleton;

/**
 * @Classname DCLSingleton
 * @Description   双重检查锁定（Double-Checked Locking）：
 *                     在实例化单例对象时，先检查是否已经存在实例，如果存在则直接返回，
 *                     否则进行同步锁加锁，再次检查是否已经存在实例，如果存在则返回，否则进行实例化操作。
 *                     这种方式避免了饿汉式和懒汉式的并发问题，并且线程安全\
 *
 * @Date 2023/11/28 9:57
 * @Created by jyl
 */
public class DCLSingleton {

    private static DCLSingleton INSTANCE;
    private static boolean isInitialized;

    private DCLSingleton() {}

    public static DCLSingleton getInstance() {
        if (isInitialized) {
            return INSTANCE;
        }
        synchronized (DCLSingleton.class) {
            if (!isInitialized) {
                INSTANCE = new DCLSingleton();
                isInitialized = true;
            }
        }
        return INSTANCE;
    }
}
